package org.example.mutithread.future;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

/**
 * @author zhangjg
 * @desc f3
 * @date 2023/03/22 15:51
 **/
public class F3 {

    public static void main(String[] args) throws Exception{

        /*4、public T getNow(T valueIfAbsent)方法的使用*/
        CompletableFuture<Integer> async = CompletableFuture.supplyAsync(() -> {
            return 4;
        });
        TimeUnit.SECONDS.sleep(2);
        /*也是获取结果的方法，在主程序走到这一行的时候，异步程序如果运行完了就返回4，如果没运行完，不会报错，会返回一个托底数据2*/
        System.out.println(async.getNow(2));

        /*5、public boolean complete(T value)方法的使用*/
        CompletableFuture<Integer> async2 = CompletableFuture.supplyAsync(() -> {
            return 5;
        });
//        System.out.println(async2.complete(2));
//        System.out.println("1-结果是："+async2.get());
        System.out.println(async2.complete(2));
        TimeUnit.SECONDS.sleep(2);
        /*先判断get()是否是能获取到异步线程里面返回的值，如果有就返回true，如果没有就返回false并且将这个值设置为complete(2)里面设置的值*/
        System.out.println("2-结果是："+async2.get());

    }
}
